package com.shhic.hhplt.server.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.Charset;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

/**
 * ftp上传，下载
 * 
 * @author why 2009-07-30
 * 
 */
public class FtpUtil {
	private FTPClient ftp;

	/**
	 * 
	 * @param path
	 *            上传到ftp服务器哪个路径下
	 * @param addr
	 *            地址
	 * @param port
	 *            端口号
	 * @param username
	 *            用户名
	 * @param password
	 *            密码
	 * @return
	 * @throws Exception
	 */
	public boolean connect(String path, String addr, int port,
			String username, String password) throws Exception {
		boolean result = false;
		ftp = new FTPClient();
		int reply;
		ftp.connect(addr, port);
		ftp.login(username, password);
		ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
		ftp.setCharset(Charset.forName("utf-8"));
		reply = ftp.getReplyCode();
		if (!FTPReply.isPositiveCompletion(reply)) {
			ftp.disconnect();
			return result;
		}
		path =  new String(path.getBytes("GBK"),"iso-8859-1");

		ftp.changeWorkingDirectory(path);
		result = true;
		return result;
	}

	/**
	 * 
	 * @param file
	 *            上传的文件或文件夹
	 * @throws Exception
	 */
	public void upload(File file) throws Exception {
		if (file.isDirectory()) {
			String dirName = new String(file.getName().getBytes("GBK"),"iso-8859-1");
			if(!ftp.changeWorkingDirectory(dirName)){
				boolean makeDirectory = ftp.makeDirectory(dirName);
				if(!makeDirectory){
					throw new Exception("ftp文件夹创建失败");
				}
				ftp.changeWorkingDirectory(dirName);
			}
			
			String[] files = file.list();
			for (int i = 0; i < files.length; i++) {
				File file1 = new File(file.getPath() + "\\" + files[i]);
				if (file1.isDirectory()) {
					upload(file1);
					ftp.changeToParentDirectory();
				} else {
					File file2 = new File(file.getPath() + "\\" + files[i]);
					FileInputStream input = new FileInputStream(file2);
					String ftpFileName =  new String(file2.getName().getBytes("GBK"),"iso-8859-1");
					if(!ftp.storeFile(ftpFileName, input)){
						System.out.println("文件上传失败"+file2.getName());
					}
					input.close();
				}
			}
		} else {
			File file2 = new File(file.getPath());
			FileInputStream input = new FileInputStream(file2);
			ftp.storeFile(file2.getName(), input);
			input.close();
		}
	}
	
	
	public void closeServer(){
		try {
			ftp.disconnect();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
